/*
 * RezeptErstellen.java
 * 
 *  author: Daniel Rudigier/Manuel
 *    date: 20.05.2008
 * 
 * 
 */
package ocumed.teams.teamb.application;

import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Vector;

import ocumed.teams.IMediver;
import ocumed.teams.IOcumed;
import ocumed.teams.IPersistence;
import ocumed.teams.OcumedFactory;
import ocumed.teams.PersistenceFactory;

/**
 * @author Daniel Rudigier / Manuel
 * @author Malcolm
 * 
 */
public class RezeptErstellen {

	private IOcumed m_ocumed;
	private IPersistence m_persistence;
	private HashMap<Integer, IMediver> m_medivers = null;

	public RezeptErstellen() {
		m_ocumed = OcumedFactory.getInstance();
		m_persistence = PersistenceFactory.getInstance();
		m_medivers = new HashMap<Integer, IMediver>();
	}

	private void cacheVerordnungenForPatient(Set<IMediver> medivers) {
		// Cachen aller Verordnungen eines Patienten
		if (m_medivers != null) {
			Set<IMediver> liste = medivers;
			Iterator<IMediver> iterator = liste.iterator();
			IMediver cmv = null;
			while (iterator.hasNext()) {
				cmv = iterator.next();
				m_medivers.put(cmv.getMediverid(), cmv);
				System.out.println(m_medivers.size());
			}
		}
	}

	public List<Integer> getVerordnungen(Integer patientId) {
		Set<IMediver> tempVerordnungen = m_ocumed.getiPatient(patientId)
				.getiMedivers();
		List<Integer> verordnungen = new Vector<Integer>();
		Iterator<IMediver> iteratorVer = null;
		IMediver tempMediver = null;

		// iterate over treatment list
		iteratorVer = tempVerordnungen.iterator();

		cacheVerordnungenForPatient(tempVerordnungen);

		// iterate over prescriptions
		while (iteratorVer.hasNext()) {
			tempMediver = iteratorVer.next();

			// make sure that time period is still valid
			// and that prescription is still printable
			if (tempMediver.getMediVerMenge() > 0
					&& tempMediver.getMediVerBis().after(new Date())
					&& tempMediver.getMediVerVon().before((new Date()))) {
				verordnungen.add(tempMediver.getMediverid());
			}

		}

		if (verordnungen.isEmpty()) {
			return null;
		}
		return verordnungen;

	}

	public String getMedikament(int verordnungsId) {
		String med = m_medivers.get(verordnungsId).getiMedikament()
				.getMedikamentname();

		return med;
	}

	public String getPackungsGr(int verordnungsId) {
		return m_medivers.get(verordnungsId).getiMedikament()
				.getMedikamentpackungsgroesse();
	}

	public String getDosierung(int verordnungsId) {
		return m_medivers.get(verordnungsId).getMediverdosierung();
	}

	public Integer getAnzahlDruckbar(int verordnungsId) {
		Integer i = m_medivers.get(verordnungsId).getMediVerMenge();
		return i;
	}

	public void setAnzahlGedruckt(int verordnungsId, int anzahlGedruckt) {
		m_medivers.get(verordnungsId).setMediVerMenge(anzahlGedruckt);
		m_persistence.put(m_medivers.get(verordnungsId));
	}
}
